<!DOCTYPE html>
<html lang="en">
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  
  
    <meta name="keywords" content="Java">
  
  
    <meta name="description" content="Thu Apr 11 2019 08:00:00 GMT+0800 (GMT+08:00)">
  
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <title>
    带你进入 Activiti 工作流的世界 |
    
    Sean</title>
  
    <link rel="shortcut icon" href="/favicon.ico">
  
  <link rel="stylesheet" href="/css/style.css">
  
    <link rel="stylesheet" href="/fancybox/jquery.fancybox.min.css">
  
  <script src="/js/pace.min.js"></script>
</head>
</html>
<body>
<main class="content">
  <section class="outer">
  <article id="post-带你进入-Activiti-工作流的世界" class="article article-type-post" itemscope itemprop="blogPost" data-scroll-reveal>

  <div class="article-inner">
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      带你进入 Activiti 工作流的世界
    </h1>
  

      </header>
    

    
      <div class="article-meta">
        <a href="/2019/04/14/带你进入-Activiti-工作流的世界/" class="article-date">
  <time datetime="2019-04-14T11:57:46.000Z" itemprop="datePublished">2019-04-14</time>
</a>
        
      </div>
    

    <div class="article-entry" itemprop="articleBody">
      

      

      
        <p><img src="http://img1.imgtn.bdimg.com/it/u=3597273931,3299733538&amp;fm=214&amp;gp=0.jpg" alt="img"></p>
<p>Activiti 是一个针对企业用户、开发人员 、系统管理员的轻量级工作流业务管理平台，其核心是使用 java 开发的快速 、 稳定的 BPMN2.0 流程引擎 。它可以与 spring 完美集成。</p>
<p>创始人 Tom Baeyens 曾经是 JBoss jBPM 的项目架构师，所以之前接触过 jBPM4 的同学，会觉得 Activiti5 很亲切。</p>
<a id="more"></a>
<h1 id="1-工作流生命周期"><a href="#1-工作流生命周期" class="headerlink" title="1 工作流生命周期"></a>1 工作流生命周期</h1><p>一个完整的工作流生命周期会经过以下 5 个阶段，并迭代循环：</p>
<p><img src="https:////upload-images.jianshu.io/upload_images/3386108-2d2e2cd2b3d493bd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/401" alt="img"></p>
<table>
<thead>
<tr>
<th style="text-align:center">阶段</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">定义</td>
<td>业务需求人员收集业务需求，然后交由开发人员加工转化为计算机可以识别的流程定义。</td>
</tr>
<tr>
<td style="text-align:center">发布</td>
<td>开发人员打包各种资源，然后在系统管理平台中发布流程定义（包括流程定义文件 、自定义表单 、 任务监听类等资源 ）。</td>
</tr>
<tr>
<td style="text-align:center">执行</td>
<td>流程引擎按照事先定义好的流程，以任务驱动的方式予以执行 。</td>
</tr>
<tr>
<td style="text-align:center">监控</td>
<td>监控依赖执行阶段 。 业务人员在办理任务的同时，引擎会收集每个任务的办理结果，然后根据结果做出处理。</td>
</tr>
<tr>
<td style="text-align:center">优化</td>
<td>对整个流程的运行结果进行分析，在此基础上进一步改进，并再次开始一个新的周期。</td>
</tr>
</tbody>
</table>
<h1 id="2-BPMN"><a href="#2-BPMN" class="headerlink" title="2 BPMN"></a>2 BPMN</h1><p>BPMN 是 Business Process Modeling Notation 的简称，即业务流程建模与标注。</p>
<p>BPMN 定义了一个业务流程图，这个流程图被设计用于创建业务流程操作的图形化模型 。 而一个业务流程模型（ Business Process Model ），指一个由图形对象（ graphical objects ）组成的网状图，图形对象包括活动（ activities) 和用于定义这些活动执行顺序的流程控制器（ flow controls ） 。</p>
<h1 id="3-Activiti-特性"><a href="#3-Activiti-特性" class="headerlink" title="3 Activiti 特性"></a>3 Activiti 特性</h1><h2 id="3-1-MyBatis"><a href="#3-1-MyBatis" class="headerlink" title="3.1 MyBatis"></a>3.1 MyBatis</h2><p>Activiti 的设计思想是简洁 、 快速 。 所以它选择了MyBatis 作为数据持久层框架，从而可以通过最优的 SQL 语句执行 Command ，仅凭如此就能让引擎在速度上保持最高的性能 。</p>
<h2 id="3-2-服务接口"><a href="#3-2-服务接口" class="headerlink" title="3.2 服务接口"></a>3.2 服务接口</h2><p>Activiti 提供了 7 个服务接口，都通过 ProcessEngine 来获取，并且支持链式编程风格：</p>
<table>
<thead>
<tr>
<th style="text-align:center">服务接口</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">RepositoryService</td>
<td>仓库服务，用于管理仓库，比如部署或删除流程定义、读取流程资源等。</td>
</tr>
<tr>
<td style="text-align:center">IdentifyService</td>
<td>身份服务，管理用户、组以及它们之间的关系。</td>
</tr>
<tr>
<td style="text-align:center">RuntimeService</td>
<td>运行时服务，管理所有正在运行的流程实例、任务等对象。</td>
</tr>
<tr>
<td style="text-align:center">TaskService</td>
<td>任务服务，管理任务。</td>
</tr>
<tr>
<td style="text-align:center">FormService</td>
<td>表单服务，管理和流程、任务相关的表单。</td>
</tr>
<tr>
<td style="text-align:center">HistroyService</td>
<td>历史服务，管理历史数据。</td>
</tr>
<tr>
<td style="text-align:center">ManagementService</td>
<td>引擎管理服务，比如管理引擎的配置、数据库和作业等核心对象。</td>
</tr>
</tbody>
</table>
<h2 id="3-3-流程设计器"><a href="#3-3-流程设计器" class="headerlink" title="3.3 流程设计器"></a>3.3 流程设计器</h2><p>与 jBPM 类似，Activiti 也提供了基于 Eclipse 的流程设计器 —— Eclipse Designer。 此外还有 Signavio 公司为 Activiti 定制的基于 Web 的 流程设计器 —— Activiti Modeler。但是在idea上面则不太友好，编辑会有bug而且需要设置才能避免乱码。</p>
<h2 id="3-4-原生支持-Spring"><a href="#3-4-原生支持-Spring" class="headerlink" title="3.4 原生支持 Spring"></a>3.4 原生支持 Spring</h2><p>Activiti 可以很容易与 Spring 集成，这对于管理事务和解析表达式来说，非常方便。</p>
<h2 id="3-5-分离运行时数据与历史数据"><a href="#3-5-分离运行时数据与历史数据" class="headerlink" title="3.5 分离运行时数据与历史数据"></a>3.5 分离运行时数据与历史数据</h2><p>这一特性与 jBPM4 的设计理念一脉相承。这样的设计架构使得引擎可以快速地读取运行时数据，只有在需要时才会从历史表中查询历史数据。 这样可以极大地提高数据的存取效率。</p>
<h1 id="4-Activiti-架构"><a href="#4-Activiti-架构" class="headerlink" title="4 Activiti 架构"></a>4 Activiti 架构</h1><p><img src="https:////upload-images.jianshu.io/upload_images/3386108-85703f6222739969.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/612" alt="img"></p>
<table>
<thead>
<tr>
<th style="text-align:center">组件</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">流程引擎（Activiti Engine）</td>
<td>提供针对 BPMN 2.0 规范的解析；执行 、创建和管理流程实例与任务；以及查询历史记录并根据结果生成报表等功能。</td>
</tr>
<tr>
<td style="text-align:center">业务模型设计器（Activiti Modeler）</td>
<td>由 Signavio 公司设计实现，适用于业务人员把需求转换为流程定义。</td>
</tr>
<tr>
<td style="text-align:center">开发模型设计器（Activiti Designer）</td>
<td>开发人员可以导入业务需求人员用业务模型设计器设计的流程定义文件（ XML 格式），这样就可以进一步加工成为可以运行的流程定义信息 。</td>
</tr>
<tr>
<td style="text-align:center">流程管理器（Activiti Explorer）</td>
<td>用于管理仓库、用户、组、流程实例和任务等流程对象。</td>
</tr>
<tr>
<td style="text-align:center">流程 REST 服务（Activiti REST）</td>
<td>提供 Restful 风格的服务，允许客户端以 JSON 的数据格式与引擎的 REST API 进行交互。</td>
</tr>
</tbody>
</table>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/2019/04/14/带你进入-Activiti-工作流的世界/" data-id="cjugwhxiv0002a37fbfkgwa5z" class="article-share-link">分享</a>
      
  <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/activiti/">activiti</a></li><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/bpm/">bpm</a></li></ul>

    </footer>

  </div>

  
    
  <nav class="article-nav">
    
    
      <a href="/2019/04/11/Hexo-github搭建属于自己的个人博客/" class="article-nav-link">
        <strong class="article-nav-caption">Olde posts</strong>
        <div class="article-nav-title">Hexo+github搭建属于自己的个人博客</div>
      </a>
    
  </nav>


  

  
    
  <div class="gitalk" id="gitalk-container"></div>
  <link rel="stylesheet" href="https://unpkg.com/gitalk/dist/gitalk.css">
  <script src="https://unpkg.com/gitalk/dist/gitalk.min.js"></script>
  <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js"></script>
  <script type="text/javascript">
    var gitalk = new Gitalk({
      clientID: '3bcdf06833d08d450760',
      clientSecret: '08222ca2c645e011ab654dc2ef8996fdb16005e1',
      repo: 'tinybao.github.io',
      owner: 'tinybao',
      admin: ['tinybao'],
      // id: location.pathname,      // Ensure uniqueness and length less than 50
      id: md5(location.pathname),
      distractionFreeMode: false,  // Facebook-like distraction free mode
      pagerDirection: 'last'
    })

  gitalk.render('gitalk-container')
  </script>

  

</article>



</section>
<!--打赏-->
        <div class="reward">
       <div class="reward-button">赏 <span class="reward-code">
        <span class="alipay-code"> <img class="alipay-img wdp-appear" src="/images/ecode/alipay.png"><b>支付宝打赏</b> </span> 
        <span class="wechat-code"> <img class="wechat-img wdp-appear" src="/images/ecode/weipay.png"><b>微信打赏</b> </span> 
       </span></div>
      <p class="reward-notice">如果文章对你有帮助，欢迎点击上方按钮打赏作者</p>
      </div>
<!-- 打赏-->

  <footer class="footer">
  
  <div class="outer">
    <div class="float-right">
      <ul class="list-inline">
  
    <li><i class="fe fe-smile-alt"></i> <span id="busuanzi_value_site_uv"></span></li>
  
</ul>
    </div>
    <ul class="list-inline">
      <li>&copy; 2019 Sean</li>
      <li>Powered by <a href="http://hexo.io/" target="_blank">Hexo</a></li>
      <li>Hosted on  <a href="https://github.com">Github</a></li>  </ul>
  </div>
</footer>

</main>
<aside class="sidebar">
  <button class="navbar-toggle"></button>

<nav class="navbar">
  
    <div class="logo">
      <a href="/"><img src="/images/shark.svg" alt="Sean"></a>
    </div>
  
  <ul class="nav nav-main">
    
      <li class="nav-item">
        <a class="nav-item-link" href="/">主页</a>
      </li>
    
      <li class="nav-item">
        <a class="nav-item-link" href="/archives">归档</a>
      </li>
    
      <li class="nav-item">
        <a class="nav-item-link" href="/gallery">相册</a>
      </li>
    
      <li class="nav-item">
        <a class="nav-item-link" href="/about">关于</a>
      </li>
    
    <li class="nav-item">
      <a class="nav-item-link nav-item-search" title="Search">
        <i class="fe fe-search"></i>
        搜索
      </a>
    </li>
  </ul>
</nav>

<nav class="navbar navbar-bottom">
  <ul class="nav">
    <li class="nav-item">
      
        <a class="nav-item-link" target="_blank" href="/atom.xml" title="RSS Feed">
          <i class="fe fe-feed"></i>
        </a>
      
    </li>
  </ul>
</nav>

<div class="search-form-wrap">
  <div class="local-search local-search-plugin">
  <input type="search" id="local-search-input" class="local-search-input" placeholder="Search...">
  <div id="local-search-result" class="local-search-result"></div>
</div>
</div>
</aside>
<script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/lazyload.min.js"></script>
<script src="/js/busuanzi-2.3.pure.min.js"></script>


  <script src="/fancybox/jquery.fancybox.min.js"></script>



  <script src="/js/search.js"></script>


<script src="/js/ocean.js"></script>

</body>
</html>